package com.briup;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

import java.time.LocalDateTime;


/*
@SpringBootApplication注解是一个组合注解，它包含了如下几个关键注解：
1. @SpringBootConfiguration：标识该类是SpringBoot的配置类，用于配置SpringBoot应用程序的Bean。
2. @EnableAutoConfiguration：开启自动配置功能，根据类路径上的依赖自动配置Spring应用程序。
3. @ComponentScan：扫描指定的包及其子包下的所有组件（如Controller、Service、Repository等），并将其注册到SpringIOC容器中。
因为@ComponentScan注解中没有指定需要扫描的包，默认扫描的包为配置类所在的包。
因此我们在SpringBoot项目中都会将启动类放在根包下
 */
@SpringBootApplication
public class SpringIOCApplication {

    public static void main(String[] args) {
        // SpringApplication.run()方法封装了IOC容器的创建和启动过程
        // 在这一过程中，SpringBoot就会自动完成IOC容器的创建，bean对象的创建与注册等操作

        // 在run()方法中传入的SpringIOCApplication.class参数就是配置类
        ConfigurableApplicationContext context =
                SpringApplication.run(SpringIOCApplication.class, args);
        System.out.println(context.getBean(LocalDateTime.class));
    }

    @Bean
    public LocalDateTime localDateTime() {
        return LocalDateTime.now();
    }
}
